Apache域名301跳转

        一个站点难免会有多个域名,而多个域名总得有一个主次,比如一个网站有两个域名访问,但不管用哪个域名访问,最终都会跳到其中固定的一个域名上去。这个行为就叫域名跳转, 301 只是一个状态码,跳转除了301 还有 302.如何配置跳转

1
[root@lamp ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

        在对应的虚拟主机配置文件中加入

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>

        保存退出。

1
2
3
[root@lamp ~]# apachectl -t
Syntax OK
[root@lamp ~]# apachectl graceful

        检测配置是否错误,并重启 apache 服务。

        如果是多个域名,这样设置:

1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>

        或者:

1
2
3
4
5
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.test.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>

        重启 apache 后,在浏览器访问 www.aaa.com 会直接跳转到 www.test.com 。也可以直接在 linux 命令下使用 curl 命令。

1
2
3
4
5
6
[root@lamp ~]# curl -x127.0.0.1:80 www.aaa.com -I
HTTP/1.1 301 Moved Permanently
Date: Thu, 05 Jan 2017 03:36:42 GMT
Server: Apache/2.2.31 (Unix) PHP/5.6.6
Location: http://www.test.com/
Content-Type: text/html; charset=iso-8859-1